<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>构造函数继承</title>
</head>
<body>
    <script>
        // 这种方法的本质是在子类的构造函数中通过call()调用父类的构造函数
    //    function Parent(){
    //        this.name = ["yy","kk"]
    //    }
    //    function Child(){
    //        Parent.call(this)
    //    }
    //    let child1 = new Child()
    //    child1.name.push("cc")
    //    console.log(child1.name)
    //    let child2 = new Child()
    //    console.log(child2.name)
    //优点：
    // 1，避免了引用类型被所有实例共享
    // 2，可以在子类中向父类传参
    // 3，可以实现实现多继承call()多个父类的对象
    // 举个例子：
     function Parent(name,age){
         this.name = name
         this.age = age
     }
     Parent.prototype.sayName = function (){
         console.log(this.name)
     }
     function Child(name,age){
         Parent.call(this,name,age)
     }
     let child1 = new Child("Jack","22")
     console.log(child1.name,child1.age)
     let child2 = new Child("angelia","26")
     console.log(child2.name,child2.age)
     console.log(child1)
    //  缺点：
    // 1，方法在构造函数中定义，每次创建实例都会创建一遍方法
    // 2，实例并不是父类的实例，是子类的实例
    // 3，只能继承父类的属性和方法，不能继承原型属性和方法
    // 4，无法实现函数复用，每个子类都是父类实例函数的副本，影响性能









    </script>
</body>
</html>